const EventEmitter =require('events');
const util = require('util')
function Girl(){
}
util.inherits(Girl,EventEmitter);
const girl = new Girl();

/*girl.on('newListener', (type) => {
  if (type === 'data') {
    girl.emit('data');
  }
});
//
girl.on('data', () => {
  console.log('绑定了data');
});*//** ← 刚绑定的时候这里on的handler还没有放到数组里去(会在此之前先执行 newListener事件回调), 故这里girl.on('data'时, 上面的girl.on('newListener' 的回调里并无法触发 girl.emit('data')*/

/** ↓ 需要改成下面这样*/

/*girl.on('newListener', (type) => {
  process.nextTick(() => { //这样就能确定绑定好了
    if (type === 'data') {
      girl.emit('data');
    }
  });
});

girl.on('data',() => {
  console.log('绑定了data');
});*/

/** 如果我们同时订阅多次 但只想触发一次呢？*/
let pending = false;
girl.on('newListener', (type) => {
  if(pending) return; //不加这个pending 总共就会打印四下 但我们这里的例子 其实只想打印两下
  process.nextTick(() => { //这样就能确定绑定好了
    girl.emit(type);
  });
  pending = true;
});
girl.on('女生失恋', () => {
  console.log('shop');
});
girl.on('女生失恋', () => {
  console.log('cry');
});
